home *** CD-ROM | disk | FTP | other *** search
/ Win 50 Game+ Vol. 8 (Japan) / Win 50 Game+ Vol. 8 (Japan).bin / lha_file / corv01r.lzh / CORV01.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-22  |  30.0 KB  |  1,298 lines

  1. // ---------------------------------------- //
  2. // Color Kun Puzzle World For Windows Vol.1 //
  3. // MS-WINDOWS Ver3.1                        //
  4. // Boland C++ For Windows Ver3.1            //
  5. // Programing By Country Fox(WIN)           //
  6. // ---------------------------------------- //
  7.  
  8. #define WIN31 1
  9.  
  10. #include <owl.h>
  11. #include <bwcc.h>
  12.  
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include <dir.h>
  16.  
  17. #include <inputdia.h>
  18. #include <filedial.h>
  19.  
  20. #define STAGEMAP_SIZEX 20
  21. #define STAGEMAP_SIZEY 11
  22.  
  23. #define DEBUG1 0
  24.  
  25. #define MAKEMAP_INIT     0
  26. #define MAKEMAP_FILELOAD 1
  27. #define MAKEMAP_RANDOM   2
  28.  
  29. // ------------------------------- //
  30. // TApplicationé⌐éτTGameMainé≡ì∞ɼ //
  31. // ------------------------------- //
  32.  
  33. class TGameMain : public TApplication
  34. {
  35. public:
  36.     TGameMain(LPSTR AName, HANDLE hInstance, HANDLE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
  37.                 : TApplication(AName, hInstance, hPrevInstance, lpCmdLine, nCmdShow) {};
  38.     virtual void InitMainWindow();
  39. };
  40.  
  41. // ----------------//
  42. // TGameMainâNâëâX //
  43. // ----------------//
  44.  
  45. _CLASSDEF(TGameWindow)
  46. class TGameWindow : public TWindow
  47. {
  48. private:
  49.     // âJâëü[îNé╠ɺîΣâXâeü[â^âX
  50.     int corkun_x,corkun_y;       // âJâëü[îNé╠ê╩Æu
  51.     int corkun_addx,corkun_addy; // âJâëü[îNé╠ê╩ÆuÅCÉ│Æl
  52.     int corkun_move_sw;          // âJâëü[îNé╠ê┌ô«èmöFâXâCâbâ`
  53.     int cor_turn;
  54.     int cor_anm;
  55.  
  56.  
  57.     HBITMAP corkun_bit;          // âJâëü[îNârâbâgâ}âbâv
  58.  
  59.     HDC BugDC;
  60.  
  61.     // éoénélîNé╠ɺîΣâXâeü[â^âX
  62.     #define POMKUN_MAX 30
  63.     int pom_x[POMKUN_MAX];
  64.     int pom_y[POMKUN_MAX];
  65.     int pom_chr[POMKUN_MAX];
  66.     int pom_cou;
  67.     int pom_max;
  68.  
  69.     int pom_bitx[4];
  70.     int pom_bity[4];
  71.  
  72.     // âQü[âÇâ}âbâv
  73.     unsigned char stagemap[STAGEMAP_SIZEX][STAGEMAP_SIZEY];
  74.     unsigned char stagechk[STAGEMAP_SIZEX][STAGEMAP_SIZEY];
  75.     int stage_no;
  76.     int stage_mode;
  77.     char stage_file[MAXPATH];
  78.  
  79.     // âLâââëâNâ^ü[ârâbâgâ}âbâvâìâPü[â^âeü[âuâï
  80.     #define CHRBIT_MAX 45
  81.  
  82.     // memo â}âbâvâeü[âuâïêΩùù
  83.     //   0 = Å░
  84.     //   1 = éoénélîN
  85.     //   2 = ò╟
  86.     //   3 = âJâëü[îN
  87.     //   4 - 13 = âJâëü[âuâìâbâNÉ╘
  88.     //  14 - 23 = âJâëü[âuâìâbâNÉ┬
  89.     //  24 = é╖é»é╖é»âuâìâbâN
  90.     //  25 - 34 = âJâëü[âuâìâbâNÉ╘
  91.     //  35 - 44 = âJâëü[âuâìâbâNÉ┬
  92.  
  93.     #define MAP_YUKA   0
  94.     #define MAP_POMKUN 1
  95.     #define MAP_KABE   2
  96.     #define MAP_CORKUN 3
  97.  
  98.     #define MAP_BLOCK 4
  99.     #define MAP_FU_BLOCK 25
  100.     #define MAP_BLOCKEND 45
  101.  
  102.     #define MAP_BLUEBLOCK 4
  103.     #define MAP_REDBLOCK  14
  104.     #define MAP_SUKEBLOCK 24
  105.     #define MAP_FU_BLUEBLOCK 25
  106.     #define MAP_FU_REDBLOCK  35
  107.  
  108.     int chr_bitx[CHRBIT_MAX];
  109.     int chr_bity[CHRBIT_MAX];
  110.  
  111.     // âLâââëâNâ^é╠âTâCâY
  112.     int chr_sizex;
  113.     int chr_sizey;
  114.  
  115.     // âQü[âÇâXâeü[â^âXâtâëâO
  116.     #define GAME_START  0
  117.     #define GAME_GIVEUP 1
  118.     #define GAME_CLEAR  2
  119.     #define GAME_SLEEP  3
  120.     #define GAME_OVER   4
  121.  
  122.     int game_flag;
  123.  
  124. public:
  125.     LPSTR GetClassName(void)
  126.     {
  127.         // â_âCâAâìâOâ{âbâNâXé╠âNâëâXû╝é≡ "BorDlgTest" é╔é╖éΘ
  128.         return "Color Kun";
  129.     }
  130.     void GetWindowClass(WNDCLASS& wc)
  131.     {
  132.         TWindow::GetWindowClass(wc);
  133.         // "SAMPLEICON" é╞éóéñû╝æOé╠âAâCâRâôâèâ\ü[âXé≡ÄwÆΦé╖éΘ
  134.         wc.hIcon = LoadIcon(GetApplication()->hInstance, "ICON_1");
  135.     }
  136.  
  137.  
  138.     // âüâCâô
  139.     TGameWindow(PTWindowsObject AParent, LPSTR ATitle);
  140.  
  141.     // â}âEâXùpDDVTè╓Éöé╠ÆΦï`
  142.     virtual void WMLButtonDown(RTMessage Msg) = [WM_FIRST + WM_LBUTTONDOWN];
  143.     virtual void WMLButtonUp(RTMessage Msg)   = [WM_FIRST + WM_LBUTTONUP];
  144.  
  145.     virtual void WMMouseMove(RTMessage Msg)   = [WM_FIRST + WM_NCMOUSEMOVE];
  146.  
  147.     // âLü[â{ü[âhùpDDVTè╓Éöé╠ÆΦï`
  148.  
  149.     // âüâjâàü[ùpDDVTè╓Éöé╠ÆΦï`
  150.     virtual void CMGameFileMenu(RTMessage Msg) = [CM_FIRST + 101];
  151.     virtual void CMGameExit(RTMessage Msg)     = [CM_FIRST + 102];
  152.  
  153.     virtual void CMGameStart(RTMessage Msg)     = [CM_FIRST + 201];
  154.     virtual void CMGameGiveUp(RTMessage Msg)    = [CM_FIRST + 202];
  155.     virtual void CMGameStageMode(RTMessage Msg) = [CM_FIRST + 203];
  156.     virtual void CMGameStageNo(RTMessage Msg)   = [CM_FIRST + 204];
  157.  
  158.     virtual void CMHelpAbout(RTMessage Msg) = [CM_FIRST + 302];
  159.  
  160.     // âEâCâôâhè╓Éöé╠ÆΦï`
  161.     virtual void SetupWindow( void );
  162.  
  163.     virtual void WMCreate( TMessage& Message )  = [ WM_FIRST + WM_CREATE ];
  164.     virtual void WMDestroy( TMessage& Message ) = [ WM_FIRST + WM_DESTROY ];
  165.  
  166.     virtual void Paint( HDC PaintDC, PAINTSTRUCT& PaintInfo );
  167.  
  168.     // â^âCâ}ü[ùpDDVTè╓Éöé╠ÆΦï`
  169.     virtual void WMTimer( TMessage& Message ) = [ WM_FIRST + WM_TIMER ];
  170.  
  171.     // âEâCâôâhâÅü[âNùpDDVTè╓Éöé╠ÆΦï`
  172.     virtual void WMSize( TMessage& Message ) = [ WM_FIRST + WM_SIZE ];
  173.  
  174.     // etc
  175.     void CorkunMove(HDC DC,HDC MemDC );
  176.     void PomkunMove(HDC DC,HDC MemDC );
  177.     void BlockMove(HDC DC,HDC MemDC );
  178.     void Kakomi(HDC DC,HDC MemDC );
  179.     void kakokako(int x,int y);
  180.  
  181.     void GameStageMake(HDC DC,HDC MemDC);
  182.     void GameStatus(HDC DC);
  183.  
  184.     int StageMapMake(void );
  185.     void DefaultStageMake(void );
  186. };
  187.  
  188.  
  189. // TGameWindowé╠âRâôâXâgâëâNâ^
  190. TGameWindow::TGameWindow(PTWindowsObject AParent, LPSTR ATitle)    : TWindow(AParent, ATitle)
  191. {
  192.     int init_chr_bitx[CHRBIT_MAX] =
  193.         {
  194.         0,64,32,128,  // Å░ü@éoénélîN  ò╟  âJâëü[îNü@
  195.         0,32,64,96,128,160,192,224,256,288, // âuâìâbâNÉ┬
  196.         0,32,64,96,128,160,192,224,256,288, // âuâìâbâNÉ╘
  197.         64, // é╖é»é╖é»âuâìâbâN
  198.         0,32,64,96,128,160,192,224,256,288, // òsô«âuâìâbâNÉ┬
  199.         0,32,64,96,128,160,192,224,256,288, // òsô«âuâìâbâNÉ╘
  200.         };
  201.     int init_chr_bity[CHRBIT_MAX] =
  202.         {
  203.         64,32,64, 0,  // Å░ü@éoénélîN  ò╟  âJâëü[îNü@
  204.          96, 96, 96, 96, 96,  96, 96, 96, 96, 96, // âuâìâbâNÉ┬
  205.         128,128,128,128,128, 128,128,128,128,128, // âuâìâbâNÉ╘
  206.         64, // é╖é»é╖é»âuâìâbâN
  207.         160,160,160,160,160, 160,160,160,160,160, // òsô«âuâìâbâNÉ┬
  208.         192,192,192,192,192, 192,192,192,192,192, // òsô«âuâìâbâNÉ╘
  209.         };
  210.     int init_pom_bitx[4] = {  0,32,64,96 };
  211.     int init_pom_bity[4] = { 32,32,32,32 };
  212.     int cou1;
  213.  
  214.     // âLâââëâNâ^âTâCâY
  215.     chr_sizex = 32;
  216.     chr_sizey = 32;
  217.  
  218.     // âEâCâôâhâTâCâY
  219.     Attr.W = chr_sizex * STAGEMAP_SIZEX - 1;
  220.     Attr.H = (chr_sizey * STAGEMAP_SIZEY - 1) + GetSystemMetrics(SM_CYCAPTION) +
  221.                    GetSystemMetrics(SM_CYMENU);
  222.     Attr.Style = WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
  223.  
  224.     // âüâjâàü[âeâôâvâîü[âg
  225.     AssignMenu("MENU_1");
  226.  
  227.     // âJâëü[îNé╠âXâeü[â^âXÅëè·ë╗
  228.     corkun_x = 1;
  229.     corkun_y = 1;
  230.     corkun_move_sw = 0;
  231.  
  232.     for(cou1 = 0;cou1 < CHRBIT_MAX;cou1 ++)
  233.         {
  234.         chr_bitx[cou1] = init_chr_bitx[cou1];
  235.         chr_bity[cou1] = init_chr_bity[cou1];
  236.         }
  237.  
  238.     // éoénélîNé╠Åëè·ë╗
  239.     for(cou1 = 0;cou1 < 4;cou1 ++)
  240.         {
  241.         pom_bitx[cou1] = init_pom_bitx[cou1];
  242.         pom_bity[cou1] = init_pom_bity[cou1];
  243.         }
  244.  
  245.     strcpy(stage_file,"stage.da2"); // â`âFâbâN
  246.     stage_no = 1;
  247.     stage_mode = 1;
  248.  
  249.     game_flag = GAME_SLEEP;
  250. }
  251.  
  252.  
  253. // -------------- //
  254. // â}âEâXë₧ôÜè╓Éö //
  255. // -------------- //
  256.  
  257. void TGameWindow::WMLButtonDown(RTMessage)
  258. {
  259.     corkun_move_sw = 1;
  260. }
  261.  
  262. void TGameWindow::WMLButtonUp(RTMessage)
  263. {
  264.     corkun_move_sw = 0;
  265. }
  266.  
  267.  
  268. void TGameWindow::WMMouseMove(RTMessage)
  269. {
  270.     corkun_move_sw = 0;
  271. }
  272.  
  273.  
  274. // ----------------- //
  275. // âEâCâôâhë₧ôÜè╓Éö //
  276. // ---------------- //
  277.  
  278. void TGameWindow::SetupWindow( void )
  279. {
  280.     corkun_bit = LoadBitmap( GetApplication()->hInstance, "CORKUN_CHR" );
  281.     if (corkun_bit == NULL)
  282.         {
  283.         MessageBox(HWindow,
  284.             "Error : LoadBitmap CORKUN_CHR",
  285.             "Color Kun For Windows Vol.1",MB_OK);
  286.         }
  287. }
  288.  
  289. void TGameWindow::WMCreate( TMessage& Msg )
  290. {
  291.     TWindow::WMCreate( Msg );
  292.  
  293.     if ( SetTimer( HWindow, 1, 100, NULL ) == 0 ) // â^âCâ}ü[ĵô╛
  294.         { // â^âCâ}ü[ĵô╛Ä╕ös
  295.             MessageBox( HWindow, "No Timers Left","Error", MB_OK );
  296.             exit( 1 );
  297.         }
  298. }
  299.  
  300. void TGameWindow::WMDestroy( TMessage& Message )
  301. {
  302.  
  303.     DeleteObject( corkun_bit ); // ârâbâgâ}âbâvë≡ò· //
  304.  
  305.     KillTimer( HWindow, 1 ); // â^âCâ}ü[ë≡ò·
  306.     TWindow::WMDestroy( Message );
  307. }
  308.  
  309. void TGameWindow::Paint( HDC PaintDC, PAINTSTRUCT& )
  310. {
  311.     HDC MemDC;
  312.     int cou1,cou2;
  313.     int obj;
  314.     int bit_x,bit_y;
  315.  
  316.     switch(game_flag)
  317.         {
  318.         case GAME_SLEEP : // âXâèü[âvÆå
  319.             TDialog *PAbout;
  320.  
  321.             game_flag = 100;
  322.             DefaultStageMake(); // âXâeü[âWé╠èεæbÉ▌îv
  323.  
  324.             PAbout = new TDialog( this, "DIALOG_2"); // â_âCâAâìâOî─é╤Åoé╡
  325.  
  326.             GetApplication()->ExecDialog(PAbout);    // â_âCâAâìâOÄ└ìs
  327.             break;
  328.  
  329.         case GAME_START : // âQü[âÇâvâîâCÆå
  330.             MemDC = CreateCompatibleDC( PaintDC );
  331.             SelectObject( MemDC, corkun_bit );
  332.  
  333.             GameStageMake(PaintDC ,MemDC);
  334.             GameStatus(PaintDC);
  335.  
  336.             DeleteDC( MemDC );
  337.             break;
  338.  
  339.         case GAME_CLEAR  : // âQü[âÇâNâèâA
  340.         case GAME_GIVEUP : // âMâuâAâbâv
  341.             MemDC = BugDC;
  342.  
  343.             obj = (game_flag == GAME_CLEAR) ? MAP_CORKUN : MAP_POMKUN;
  344.             bit_x = chr_bitx[obj];
  345.             bit_y = chr_bity[obj];
  346.             for(cou1 = 0;cou1 < STAGEMAP_SIZEX;cou1 ++)
  347.                 for(cou2 = 0;cou2 < STAGEMAP_SIZEY;cou2 ++)
  348.                     {
  349.                     BitBlt( PaintDC, cou1 * 32, cou2 * 32,
  350.                            32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  351.                     }
  352.             break;
  353.         }
  354.  
  355. }
  356.  
  357.  
  358. // ---------------------------- //
  359. // âüâjâàü[âeâôâvâîü[âgë₧ôÜè╓Éö //
  360. // ---------------------------- //
  361.  
  362. // âQü[âÇâXâ^ü[âg
  363. void TGameWindow::CMGameStart(RTMessage)
  364. {
  365.     HDC DC,MemDC;
  366.     int err;
  367.  
  368.     if (game_flag != GAME_START)
  369.         { // âQü[âÇâXâ^ü[âg
  370.         game_flag = GAME_START;
  371.         err = StageMapMake();
  372.         switch(err)
  373.             {
  374.             case 2 : // âtâ@âCâïé¬é╚éó
  375.                 MessageBox(HWindow,
  376.                     "Error : No File!!",
  377.                     "Color Kun For Windows Vol.1",MB_OK);
  378.                 game_flag = GAME_SLEEP;
  379.                 return;
  380.  
  381.             case 1 : // âXâeü[âWé¬é▌é┬é⌐éτé╚éó
  382.                 MessageBox(HWindow,
  383.                     "Error : No Stage!!",
  384.                     "Color Kun For Windows Vol.1",MB_OK);
  385.                 game_flag = GAME_SLEEP;
  386.                 return;
  387.             }
  388.  
  389.         // âfâoâCâXâRâôâeâLâXâgĵô╛
  390.         DC = GetDC( HWindow );
  391.         MemDC = CreateCompatibleDC( DC );
  392.         SelectObject( MemDC, corkun_bit );
  393.  
  394.         GameStageMake(DC ,MemDC);
  395.         GameStatus(DC);
  396.  
  397.         // âfâoâCâXâRâôâeâLâXâgë≡ò·
  398.         DeleteDC( MemDC );
  399.         ReleaseDC( HWindow, DC );
  400.         }
  401. }
  402.  
  403. // âMâuâAâbâvüIüI
  404. void TGameWindow::CMGameGiveUp(RTMessage)
  405. {
  406.     HDC DC,MemDC;
  407.  
  408.     if (game_flag == GAME_START)
  409.         {
  410.         // âfâoâCâXâRâôâeâLâXâgĵô╛
  411.         DC = GetDC( HWindow );
  412.         MemDC = CreateCompatibleDC( DC );
  413.         SelectObject( MemDC, corkun_bit );
  414.  
  415.         game_flag = GAME_GIVEUP;
  416.         StageMapMake();
  417.         GameStageMake(DC,MemDC);
  418.         GameStatus(DC);
  419.         game_flag = GAME_START;
  420.  
  421.         // âfâoâCâXâRâôâeâLâXâgë≡ò·
  422.         DeleteDC( MemDC );
  423.         ReleaseDC( HWindow, DC );
  424.         }
  425. }
  426.  
  427. // âXâeü[âWâiâôâoü[É▌ÆΦ
  428. void TGameWindow::CMGameStageMode(RTMessage)
  429. {
  430.     HDC DC,MemDC;
  431.  
  432.     stage_mode = (stage_mode == MAKEMAP_FILELOAD) ? MAKEMAP_RANDOM : MAKEMAP_FILELOAD;
  433.  
  434.     if (stage_mode == MAKEMAP_FILELOAD)
  435.         {
  436.         MessageBox(HWindow,"File Data","Stage Mode",MB_OK);
  437.         }
  438.     else
  439.         {
  440.         MessageBox(HWindow,"Random Stage","Stage Mode",MB_OK);
  441.         }
  442.  
  443.     // âfâoâCâXâRâôâeâLâXâgĵô╛
  444.     DC = GetDC( HWindow );
  445.     MemDC = CreateCompatibleDC( DC );
  446.     SelectObject( MemDC, corkun_bit );
  447.  
  448.     DefaultStageMake(); // âXâeü[âWé╠èεæbÉ▌îv
  449.     StageMapMake();     // âXâeü[âWô╟é▌ì₧é▌
  450.  
  451.     GameStageMake(DC,MemDC);    // âXâeü[âWò\Ī
  452.     GameStatus(DC);     // âXâeü[â^âXò\Ī
  453.  
  454.     // âfâoâCâXâRâôâeâLâXâgë≡ò·
  455.     DeleteDC( MemDC );
  456.     ReleaseDC( HWindow, DC );
  457. }
  458.  
  459. // âXâeü[âWâiâôâoü[É▌ÆΦ
  460. void TGameWindow::CMGameStageNo(RTMessage)
  461. {
  462.     HDC DC,MemDC;
  463.     char st_no[80];
  464.     int err;
  465.     int swp_no;
  466.  
  467.     if (GetApplication()->ExecDialog(new TInputDialog(this,"Stage Select",
  468.         "Input a new Stage No:",st_no,sizeof(st_no))) != IDOK)
  469.         { // âLâââôâZâï
  470.         return;
  471.         }
  472.  
  473.     swp_no = stage_no;
  474.     stage_no = atoi(st_no);
  475.     if (stage_no == 0)
  476.         { // Error
  477.         MessageBox(HWindow,
  478.             "Error : No Stage!!",
  479.             "Color Kun For Windows [Stage Edit] Vol.1",MB_OK);
  480.  
  481.         stage_no = swp_no;
  482.         return;
  483.         }
  484.  
  485.  
  486.     // âfâoâCâXâRâôâeâLâXâgĵô╛
  487.     DC = GetDC( HWindow );
  488.     MemDC = CreateCompatibleDC( DC );
  489.     SelectObject( MemDC, corkun_bit );
  490.  
  491.     DefaultStageMake(); // âXâeü[âWé╠èεæbÉ▌îv
  492.     err = StageMapMake();     // âXâeü[âWô╟é▌ì₧é▌
  493.     switch(err)
  494.         {
  495.         case 2 : // âtâ@âCâïé¬é╚éó
  496.             MessageBox(HWindow,
  497.                 "Error : No File!!",
  498.                 "Color Kun For Windows Vol.1",MB_OK);
  499.             break;
  500.  
  501.         case 1 : // âXâeü[âWé¬é▌é┬é⌐éτé╚éó
  502.             MessageBox(HWindow,
  503.                 "Error : No Stage!!",
  504.                 "Color Kun For Windows Vol.1",MB_OK);
  505.             break;
  506.         }
  507.  
  508.     GameStageMake(DC,MemDC);    // âXâeü[âWò\Ī
  509.     GameStatus(DC);     // âXâeü[â^âXò\Ī
  510.  
  511.     // âfâoâCâXâRâôâeâLâXâgë≡ò·
  512.     DeleteDC( MemDC );
  513.     ReleaseDC( HWindow, DC );
  514. }
  515.  
  516. // âXâeü[âWâtâ@âCâïâZâîâNâg
  517. void TGameWindow::CMGameFileMenu(RTMessage)
  518. {
  519.     HDC DC,MemDC;
  520.     int err;
  521.     int swp_no;
  522.     char filename[MAXPATH];
  523.  
  524.     if (GetApplication()->ExecDialog(
  525.         new TFileDialog(this,SD_FILEOPEN,strcpy(filename,"*.da2"))) != IDOK)
  526.         { // âLâââôâZâï
  527.         return;
  528.         }
  529.  
  530.     strcpy(stage_file,filename);
  531.  
  532.     swp_no = 0;
  533.     stage_no = 1;
  534.  
  535.     DefaultStageMake(); // âXâeü[âWé╠èεæbÉ▌îv
  536.     err = StageMapMake();     // âXâeü[âWô╟é▌ì₧é▌
  537.     switch(err)
  538.         {
  539.         case 1 :
  540.         case 2 :
  541.             MessageBox(HWindow,
  542.                 "Error : No File!!",
  543.                 "Color Kun For Windows Vol.1",MB_OK);
  544.             game_flag = GAME_SLEEP;
  545.             stage_no = swp_no;
  546.             return;
  547.         }
  548.  
  549.     // âfâoâCâXâRâôâeâLâXâgĵô╛
  550.     DC = GetDC( HWindow );
  551.     MemDC = CreateCompatibleDC( DC );
  552.     SelectObject( MemDC, corkun_bit );
  553.  
  554.     GameStageMake(DC,MemDC);    // âXâeü[âWò\Ī
  555.     GameStatus(DC);     // âXâeü[â^âXò\Ī
  556.  
  557.     // âfâoâCâXâRâôâeâLâXâgë≡ò·
  558.     DeleteDC( MemDC );
  559.     ReleaseDC( HWindow, DC );
  560. }
  561.  
  562. // ÅIù╣
  563. void TGameWindow::CMGameExit(RTMessage)
  564. {
  565.     SendMessage(HWindow,WM_CLOSE,0,0);
  566. }
  567.  
  568. // âAâoâEâg
  569. void TGameWindow::CMHelpAbout(RTMessage)
  570. {
  571.     TDialog *PAbout;
  572. //    HWND ta;
  573.  
  574.     // é`éééÅéòéöâ_âCâAâìâOì∞ɼ
  575.     PAbout = new TDialog( this, "DIALOG_1"); // â_âCâAâìâOî─é╤Åoé╡
  576.  
  577.  //    ta = TDialog()->GetItemHandle(PAbout);
  578. // MoveWindow(ta,0,0,100,100,FALSE);
  579.     GetApplication()->ExecDialog(PAbout);    // â_âCâAâìâOÄ└ìs
  580. }
  581.  
  582. // â^âCâ}ü[üiâüâCâôüj
  583. void TGameWindow::WMTimer( TMessage& )
  584. {
  585.     HDC DC,MemDC;
  586.  
  587.     if (game_flag == GAME_START)
  588.         {
  589.         // âfâoâCâXâRâôâeâLâXâgĵô╛
  590.         DC = GetDC( HWindow );
  591.         MemDC = CreateCompatibleDC( DC );
  592.         SelectObject( MemDC, corkun_bit );
  593.  
  594.         CorkunMove(DC,MemDC ); // âJâëü[îNê┌ô«
  595.  
  596.         if (game_flag == GAME_CLEAR)
  597.             { // éPâXâeü[âWâNâèâA
  598.             stage_no ++;
  599.             if (StageMapMake() == 1)
  600.                 { // âIü[âïâXâeü[âWâNâèâA
  601.                 TDialog *PCon;
  602.  
  603.                 PCon = new TDialog( this, "DIALOG_3"); // â_âCâAâìâOî─é╤Åoé╡
  604.                 GetApplication()->ExecDialog(PCon);    // â_âCâAâìâOÄ└ìs
  605.                 game_flag = GAME_SLEEP;
  606.                 }
  607.             else
  608.                 { // âlâNâXâgâXâeü[âW
  609.                 GameStageMake(DC,MemDC);
  610.                 GameStatus(DC);
  611.                 game_flag = GAME_START;
  612.                 }
  613.             }
  614.  
  615.         // âfâoâCâXâRâôâeâLâXâgë≡ò·
  616.         DeleteDC( MemDC );
  617.         ReleaseDC( HWindow, DC );
  618.         }
  619. }
  620.  
  621. // âJâëü[îNê┌ô«âïü[â`âô
  622. void TGameWindow::CorkunMove(HDC DC,HDC MemDC )
  623. {
  624.     // corkun bitmap locate
  625.     //  0, 1 -> Left
  626.     //  2, 3 -> Up
  627.     //  4, 5 -> Down
  628.     //  6, 7 -> Right
  629.     int cor_bitx[] = {   0, 32, 64, 96,128,160,192,224 };
  630.     int cor_bity[] = {   0,  0,  0,  0,  0,  0,  0,  0 };
  631.  
  632.     POINT mouse;
  633.     int swp_x,swp_y;
  634.     int hit_x,hit_y;
  635.     int bit_x,bit_y;
  636.  
  637.     // â}âEâXì└òW
  638.     GetCursorPos(&mouse);              // âJü[â\âïì└òWĵô╛
  639.     ScreenToClient(HWindow, &mouse);  // âNâëâCâAâôâgì└òWé╔ò╧è╖
  640.  
  641.     // â}âEâXé╔éµéΘâJâëü[îNê┌ô«âïü[â`âô
  642.     hit_x = mouse.x / 32;
  643.     hit_y = mouse.y / 32;
  644.  
  645.     if (corkun_move_sw)
  646.         { // ê┌ô«ïûë┬
  647.         corkun_addx = (corkun_x < hit_x) - (corkun_x > hit_x);
  648.         if (!corkun_addx) corkun_addy = (corkun_y < hit_y) - (corkun_y > hit_y);
  649.         }
  650.     else
  651.         { // ê┌ô«ï╓Ä~
  652.         corkun_addx = 0;
  653.         corkun_addy = 0;
  654.         }
  655.  
  656.     // âJâëü[îNâLâââëâNâ^É▌ÆΦ
  657.     if (corkun_addx != 0 || corkun_addy != 0)
  658.         {
  659.         if (corkun_addx == 0)
  660.             cor_turn = (corkun_addy == -1) ? 2 : 4;
  661.         else
  662.             cor_turn = (corkun_addx == -1) ? 0 : 6;
  663.         }
  664.  
  665.     // âAâjâüâJâEâôâ^ü[
  666.     cor_anm = (cor_anm == 0) ? 1 : 0;
  667.  
  668.     #if DEBUG1
  669.         { // â}âEâXâìâPü[â^
  670.         char S[10];
  671.  
  672.         sprintf(S, "Mouse (%3.3d,%3.3d)", mouse.x, mouse.y);
  673.         TextOut(DC, 0, 0, S, strlen(S));
  674.         sprintf(S, "cor_turn (%3.3d)", cor_turn + cor_anm);
  675.         TextOut(DC, 0,20, S, strlen(S));
  676.         }
  677.     #endif
  678.  
  679.     // ê╩Æuò█æ╢
  680.     swp_x = corkun_x;
  681.     swp_y = corkun_y;
  682.  
  683.     // ê╩ÆuòΓÉ│
  684.     corkun_x += corkun_addx;
  685.     corkun_y += corkun_addy;
  686.     if (stagemap[corkun_x][corkun_y] > 0) BlockMove(DC,MemDC ); // ÅßèQò¿â`âFâbâN
  687.  
  688.     // âJâëü[îNò\Ī
  689.     bit_x = cor_bitx[cor_turn + cor_anm];
  690.     bit_y = cor_bity[cor_turn + cor_anm];
  691.     BitBlt( DC, corkun_x * 32,corkun_y * 32,
  692.            32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  693.  
  694.     if (swp_x != corkun_x || swp_y != corkun_y)
  695.         { // éoénélîNé╠Åêù¥
  696.         PomkunMove(DC,MemDC );
  697.         }
  698.  
  699.     corkun_addx = 0;
  700.     corkun_addy = 0;
  701. }
  702.  
  703. void TGameWindow::PomkunMove(HDC DC,HDC MemDC )
  704. {
  705.     int swp_x,swp_y;
  706.     int obj;
  707.     int cou1;
  708.     int bit_x,bit_y;
  709.     int loc_x,loc_y;
  710.  
  711.     // êΩö╘éñé╡éδé╠éoénélîNé≡Å┴é╖
  712.     loc_x = pom_x[pom_max];
  713.     loc_y = pom_y[pom_max];
  714.     if (pom_max == 0 ||
  715.        (pom_x[pom_max] != pom_x[pom_max - 1] || pom_y[pom_max] != pom_y[pom_max - 1]))
  716.         { // memo : âXâ^ü[âgÄ₧é╔éoénélîNé¬Å┴éªéΘéaétéfæ╬Åê
  717.         obj = MAP_YUKA;
  718.         bit_x = chr_bitx[obj];
  719.         bit_y = chr_bity[obj];
  720.         BitBlt( DC, loc_x * 32,loc_y * 32, 32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  721.         }
  722.  
  723.     // âìâPü[â^é≡âRâsü[
  724.     for(cou1 = pom_max;cou1 > 0;cou1 --)
  725.         {
  726.         pom_x[cou1] = pom_x[cou1 - 1];
  727.         pom_y[cou1] = pom_y[cou1 - 1];
  728.         pom_chr[cou1] = pom_chr[cou1 - 1];
  729.         }
  730.  
  731.     // ì┼ÉVé╠éoénélîNé≡ò\Ī
  732.     swp_x = corkun_x - corkun_addx;
  733.     swp_y = corkun_y - corkun_addy;
  734.     pom_x[0] = swp_x;
  735.     pom_y[0] = swp_y;
  736.     pom_chr[0] = cor_turn >> 1;
  737.     bit_x = pom_bitx[pom_chr[0]];
  738.     bit_y = pom_bity[pom_chr[0]];
  739.     BitBlt( DC, pom_x[0] * 32,pom_y[0] * 32, 32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  740.  
  741.     // Map Write
  742.     stagemap[loc_x][loc_y] = MAP_YUKA;
  743.     stagemap[pom_x[0]][pom_y[0]] = MAP_POMKUN;
  744. }
  745.  
  746. // âuâìâbâNê┌ô«âïü[â`âô
  747. void TGameWindow::BlockMove(HDC DC,HDC MemDC )
  748. {
  749.     POINT mouse;
  750.     int bit_x,bit_y;
  751.     int hit_x,hit_y;
  752.     int boc_x,boc_y;
  753.     int obj;
  754.     int s_x,s_y,s_obj;
  755.  
  756.     boc_x = corkun_x;
  757.     boc_y = corkun_y;
  758.  
  759.     // âJâëü[îNé╠ê┌ô«é≡ù}ɺ
  760.     corkun_x -= corkun_addx;
  761.     corkun_y -= corkun_addy;
  762.  
  763.     // â}âEâXì└òW
  764.     GetCursorPos(&mouse);              // âJü[â\âïì└òWĵô╛
  765.     ScreenToClient(HWindow, &mouse);  // âNâëâCâAâôâgì└òWé╔ò╧è╖
  766.  
  767.     hit_x = mouse.x / 32;
  768.     hit_y = mouse.y / 32;
  769.  
  770.     // é╟é±é╚ÅßèQò¿é╔Å╒ô╦é╡é╜é⌐üH
  771.     obj = stagemap[boc_x][boc_y];
  772.     s_x = boc_x;
  773.     s_y = boc_y;
  774.     s_obj = obj;
  775.  
  776.     if ((obj >= MAP_BLOCK && obj < MAP_FU_BLOCK) &&
  777.         (hit_x == boc_x && hit_y == boc_y))
  778.         { // âuâìâbâNê┌ô«
  779.  
  780.         for(;;)
  781.             {
  782.             // ÅßèQò¿é╔ôûé╜é┴é─é╞é▄éΘüH
  783.             if (stagemap[boc_x + corkun_addx][boc_y + corkun_addy] > MAP_YUKA) break;
  784.  
  785.             // Å░é┼Å┴ïÄ
  786.             bit_x = chr_bitx[MAP_YUKA];
  787.             bit_y = chr_bity[MAP_YUKA];
  788.             BitBlt( DC, boc_x * 32,boc_y * 32,
  789.                   32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  790.             stagemap[boc_x][boc_y] = MAP_YUKA;
  791.  
  792.             // ê┌ô«
  793.             boc_x += corkun_addx;
  794.             boc_y += corkun_addy;
  795.  
  796.             // âuâìâbâNÅæé½ì₧é▌
  797.             bit_x = chr_bitx[obj];
  798.             bit_y = chr_bity[obj];
  799.             BitBlt( DC, boc_x * 32,boc_y * 32,
  800.                   32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  801.             stagemap[boc_x][boc_y] = obj;
  802.             }
  803.         }
  804.  
  805.     // ê═é▌Åêù¥
  806.     if (s_obj != MAP_YUKA &&
  807.        (hit_x == s_x && hit_y == s_y)) Kakomi(DC,MemDC);
  808.  
  809. }
  810.  
  811. // ê═é▌Åêù¥
  812. void TGameWindow::Kakomi(HDC DC,HDC MemDC )
  813. {
  814.     int bit_x,bit_y;
  815.     int cou1,cou2;
  816.     int obj;
  817.     int swp_pom;
  818.     int back_cor;
  819.     int add_flag; // éoénélîNé╠ÅCÉ│Æl
  820.  
  821.     back_cor = stagemap[corkun_x][corkun_y];
  822.     stagemap[corkun_x][corkun_y] = MAP_POMKUN;
  823.  
  824.     /* â`âFâbâNâ}âbâvÅëè·ë╗ */
  825.     for(cou1 = 0;cou1 < STAGEMAP_SIZEX;cou1 ++)
  826.         for(cou2 = 0;cou2 < STAGEMAP_SIZEY;cou2 ++)
  827.             {
  828.             stagechk[cou1][cou2] = stagemap[cou1][cou2];
  829.             }
  830.  
  831.  
  832.  
  833.     /* ê═é▌â`âFâbâN */
  834.     for(cou1 = 0;cou1 < STAGEMAP_SIZEX;cou1 ++)
  835.         for(cou2 = 0;cou2 < STAGEMAP_SIZEY;cou2 ++)
  836.             {
  837.             obj = stagechk[cou1][cou2];
  838.             if (obj == MAP_YUKA || obj == MAP_KABE) kakokako(cou1,cou2);
  839.             }
  840.  
  841.  
  842.     stagemap[corkun_x][corkun_y] = back_cor;
  843.  
  844.  
  845.     /* ê═é▌é╠ÆåÉgé═é╚éƒü[é╔üH */
  846.     add_flag = 0;
  847.     for(cou1 = 0;cou1 < STAGEMAP_SIZEX;cou1 ++)
  848.         for(cou2 = 0;cou2 < STAGEMAP_SIZEY;cou2 ++)
  849.             {
  850.             obj = stagechk[cou1][cou2];
  851.             if (obj >= MAP_BLOCK && obj <= MAP_BLOCKEND)
  852.                 { /* ê═é▄éΩé╜ù╠êµ */
  853.                 // éaékétédéaékénébéj
  854.                 if (obj >= MAP_BLUEBLOCK    && obj < MAP_REDBLOCK)    add_flag -= (obj - MAP_BLUEBLOCK);
  855.                 if (obj >= MAP_FU_BLUEBLOCK && obj < MAP_FU_REDBLOCK) add_flag -= (obj - MAP_FU_BLUEBLOCK);
  856.                 // éqédécéaékénébéj
  857.                 if (obj >= MAP_REDBLOCK    && obj < MAP_SUKEBLOCK) add_flag += (obj - MAP_REDBLOCK);
  858.                 if (obj >= MAP_FU_REDBLOCK && obj < MAP_BLOCKEND)  add_flag += (obj - MAP_FU_REDBLOCK);
  859.  
  860.                 if (obj != MAP_SUKEBLOCK)
  861.                     {
  862.                     stagemap[cou1][cou2] = MAP_YUKA;
  863.                     bit_x = chr_bitx[MAP_YUKA];
  864.                     bit_y = chr_bity[MAP_YUKA];
  865.                     BitBlt( DC, cou1 * 32,cou2 * 32,
  866.                             32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  867.                     }
  868.                 }
  869.             }
  870.  
  871.     // éoénélîNé╠Éöé≡ÅCÉ│
  872.     swp_pom = pom_max;
  873.     pom_max += add_flag;
  874.     if (pom_max < 0)              pom_max = 0;
  875.     if (pom_max > POMKUN_MAX - 2) pom_max = 0;
  876.  
  877.     if (pom_max > swp_pom)
  878.         { /* éoénélîNæ¥ë┴ */
  879.         for(cou1 = swp_pom;cou1 <= pom_max;cou1 ++)
  880.             {
  881.             pom_x[cou1] = pom_x[swp_pom];
  882.             pom_y[cou1] = pom_y[swp_pom];
  883.             stagemap[pom_x[cou1]][pom_y[cou1]] = MAP_POMKUN;
  884.             }
  885.         }
  886.     else
  887.         { /* éoénélîNî╕Å¡ */
  888.         bit_x = chr_bitx[MAP_YUKA];
  889.         bit_y = chr_bity[MAP_YUKA];
  890.             for(cou1 = swp_pom;cou1 >= pom_max + 1;cou1 --)
  891.             {
  892.             stagemap[pom_x[cou1]][pom_y[cou1]] = MAP_YUKA;
  893.             BitBlt( DC, pom_x[cou1] * 32,pom_y[cou1] * 32,
  894.                     32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  895.             }
  896.         }
  897.  
  898.     GameStatus(DC); // éoénélîNé╠ÉöüAì─ò\Ī
  899.  
  900. #if 0
  901.     for(cou1 = 0;cou1 < STAGEMAP_SIZEX;cou1 ++)
  902.         for(cou2 = 0;cou2 < STAGEMAP_SIZEY;cou2 ++)
  903.             {
  904.             char str[80];
  905.  
  906.             sprintf(str,"%2.2x",stagechk[cou1][cou2]);
  907.             TextOut(DC,cou1 * 16,cou2 * 16,str,strlen(str));
  908.             }
  909. #endif
  910.  
  911.     { // âXâeü[âWâNâèâAâ`âFâbâNüiâQü[âÇâIü[âoü[éµéΦùDɵüj
  912.     int flag = 0;
  913.  
  914.     for(cou1 = 0;cou1 < STAGEMAP_SIZEX;cou1 ++)
  915.         for(cou2 = 0;cou2 < STAGEMAP_SIZEY;cou2 ++)
  916.             if (stagemap[cou1][cou2] >= MAP_BLOCK &&
  917.                 stagemap[cou1][cou2] != MAP_SUKEBLOCK) flag = 1;
  918.     if (!flag) game_flag = GAME_CLEAR;
  919.     }
  920. }
  921.  
  922. // âyâCâôâgâïü[â`âô
  923. void TGameWindow::kakokako(int x,int y)
  924. {
  925.     int chk;
  926.  
  927.     /*----- ë╝æzëµû╩ö═ê═èOé╛é┴é╜éτâèâ^ü[âô */
  928.     if (x < 0 || x > STAGEMAP_SIZEX - 1) return;
  929.     if (y < 0 || y > STAGEMAP_SIZEY - 1) return;
  930.  
  931.     /*----- öwîiüEò╟üEÉöÄÜâuâìâbâNé╛é┴é╜éτâyâCâôâg */
  932.     chk = stagechk[x][y];
  933.     if (chk == MAP_YUKA || chk == MAP_KABE ||
  934.         (chk >= MAP_BLOCK && chk <= MAP_BLOCKEND && chk != MAP_SUKEBLOCK))
  935.             {
  936.             stagechk[x][y] |= 0x80;
  937.             kakokako(x - 1, y);
  938.             kakokako(x + 1, y);
  939.             kakokako(x, y - 1);
  940.             kakokako(x, y + 1);
  941.             }
  942. }
  943.  
  944.  
  945. // âEâCâôâhâTâCâYò╧ìX
  946. void TGameWindow::WMSize( TMessage& )
  947. {
  948.     if ( IsIconic( HWindow ) ) // âEâCâôâhé¬ì┼Å¡ë╗é│éΩé─éóéΘé⌐üH
  949.         KillTimer( HWindow, 1 ); // â^âCâ}ü[ìφÅ£
  950.     else
  951.         if ( SetTimer( HWindow, 1, 100, NULL ) == 0 )
  952.             {
  953.                 MessageBox( HWindow, "No Timers Left",
  954.                     "Error", MB_OK );
  955.                 exit( 1 );
  956.             }
  957. }
  958.  
  959. // âEâCâôâhâCâjâVâââëâCâY
  960. void TGameMain::InitMainWindow()
  961. {
  962.     MainWindow = new TGameWindow(NULL, Name);
  963.  
  964. }
  965.  
  966. // âEâCâôâhâüâCâôè╓Éö
  967. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
  968.   LPSTR lpCmdLine, int nCmdShow)
  969. {
  970.     TGameMain GameMain("COLOR KUN PUZZLE WORLD Vol.1",
  971.                      hInstance, hPrevInstance, lpCmdLine, nCmdShow);
  972.  
  973.     BWCCGetVersion();
  974.  
  975.     GameMain.Run();
  976.  
  977.     return GameMain.Status;
  978. }
  979.  
  980.  
  981. // --- //
  982. // Etc //
  983. // --- //
  984.  
  985. // âXâeü[âWò`ëµ
  986. void TGameWindow::GameStageMake(HDC DC ,HDC MemDC)
  987. {
  988.     int cou0,cou1,cou2;
  989.     int bit_x,bit_y;
  990.     int obj;
  991.     TDialog *PAbout;
  992.  
  993.     // ö┌ï»é╚ïZ
  994.     if (stage_no == -1)
  995.         { // é│éτé╔ÄΦö▓é½üiüGüQüGüj
  996.         TextOut(DC,310,100,"The End!!",strlen("The End!!"));
  997.         game_flag = GAME_SLEEP;
  998.         return;
  999.         }
  1000.  
  1001.     // Å░ò\Ī
  1002.     if (game_flag == GAME_START || game_flag == 100)
  1003.         { // âmü[â}âïé╠âXâeü[âWò\Ī
  1004.         for(cou1 = 0;cou1 < STAGEMAP_SIZEX;cou1 ++)
  1005.             for(cou2 = 0;cou2 < STAGEMAP_SIZEY;cou2 ++)
  1006.                 {
  1007.                 bit_x = chr_bitx[stagemap[cou1][cou2]];
  1008.                 bit_y = chr_bity[stagemap[cou1][cou2]];
  1009.                 BitBlt( DC, cou1 * 32, cou2 * 32,
  1010.                        32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  1011.                 }
  1012.         }
  1013.  
  1014.     if (game_flag == GAME_CLEAR || game_flag == GAME_GIVEUP)
  1015.         { // âXâeü[âWâNâèâAò\Īùp
  1016.         obj = (game_flag == GAME_CLEAR) ? MAP_CORKUN : MAP_POMKUN;
  1017.         bit_x = chr_bitx[obj];
  1018.         bit_y = chr_bity[obj];
  1019.  
  1020.         // âNâèâA
  1021.         for(cou0 = 0;cou0 < STAGEMAP_SIZEY / 2 + 1;cou0 ++)
  1022.             {
  1023.             for(cou1 = 0;cou1 < STAGEMAP_SIZEX;cou1 ++)
  1024.                 {
  1025.                 BitBlt( DC, cou1 * 32, cou0 * 32,
  1026.                        32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  1027.                 BitBlt( DC, cou1 * 32,(STAGEMAP_SIZEY - 1 - cou0) * 32,
  1028.                        32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  1029.                 }
  1030.  
  1031.             for(cou1 = 0;cou1 < STAGEMAP_SIZEY;cou1 ++)
  1032.                 {
  1033.                 BitBlt( DC, cou0 * 32, cou1 * 32,
  1034.                        32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  1035.                 BitBlt( DC, (STAGEMAP_SIZEX - 1 - cou0) * 32, cou1 * 32,
  1036.                        32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  1037.                 }
  1038.             }
  1039.  
  1040.         BugDC = MemDC;
  1041.         // âüâbâZü[âWò\Ī
  1042.         if (game_flag == GAME_CLEAR)
  1043.             { // Stage Clear
  1044.             PAbout = new TDialog( this, "DIALOG_4"); // â_âCâAâìâOî─é╤Åoé╡
  1045.             GetApplication()->ExecDialog(PAbout);    // â_âCâAâìâOÄ└ìs
  1046.             }
  1047.         else
  1048.             { // Give Up
  1049.             PAbout = new TDialog( this, "DIALOG_5"); // â_âCâAâìâOî─é╤Åoé╡
  1050.             GetApplication()->ExecDialog(PAbout);    // â_âCâAâìâOÄ└ìs
  1051.             }
  1052.  
  1053.         // âXâeü[âWò`ëµ
  1054.         for(cou0 = 0;cou0 < STAGEMAP_SIZEY / 2 + 1;cou0 ++)
  1055.             {
  1056.             for(cou1 = 0;cou1 < STAGEMAP_SIZEX;cou1 ++)
  1057.                 {
  1058.                 bit_x = chr_bitx[stagemap[cou1][cou0]];
  1059.                 bit_y = chr_bity[stagemap[cou1][cou0]];
  1060.                 BitBlt( DC, cou1 * 32, cou0 * 32,
  1061.                        32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  1062.                 bit_x = chr_bitx[stagemap[cou1][STAGEMAP_SIZEY - 1 - cou0]];
  1063.                 bit_y = chr_bity[stagemap[cou1][STAGEMAP_SIZEY - 1 - cou0]];
  1064.                 BitBlt( DC, cou1 * 32,(STAGEMAP_SIZEY - 1 - cou0) * 32,
  1065.                        32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  1066.                 }
  1067.  
  1068.             for(cou1 = 0;cou1 < STAGEMAP_SIZEY;cou1 ++)
  1069.                 {
  1070.                 bit_x = chr_bitx[stagemap[cou0][cou1]];
  1071.                 bit_y = chr_bity[stagemap[cou0][cou1]];
  1072.                 BitBlt( DC, cou0 * 32, cou1 * 32,
  1073.                        32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  1074.                 bit_x = chr_bitx[stagemap[STAGEMAP_SIZEX - 1 - cou0][cou1]];
  1075.                 bit_y = chr_bity[stagemap[STAGEMAP_SIZEX - 1 - cou0][cou1]];
  1076.                 BitBlt( DC, (STAGEMAP_SIZEX - 1 - cou0) * 32, cou1 * 32,
  1077.                        32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  1078.                 }
  1079.             }
  1080.         }
  1081.  
  1082.     // éoénélîNò\Ī
  1083.     for(cou1 = 0;cou1 <= pom_max;cou1 ++)
  1084.         {
  1085.         bit_x = pom_bitx[pom_chr[cou1]];
  1086.         bit_y = pom_bity[pom_chr[cou1]];
  1087.         BitBlt( DC, pom_x[cou1] * 32, pom_y[cou1] * 32,
  1088.                    32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  1089.         }
  1090.  
  1091.     // âJâëü[îNò\Ī
  1092.     bit_x = chr_bitx[MAP_CORKUN];
  1093.     bit_y = chr_bity[MAP_CORKUN];
  1094.     BitBlt( DC, corkun_x * 32, corkun_y * 32,
  1095.                    32, 32, MemDC, bit_x, bit_y, SRCCOPY );
  1096. }
  1097.  
  1098. // âQü[âÇâXâeü[â^âX
  1099. void TGameWindow::GameStatus(HDC DC)
  1100. {
  1101.     char str[80];
  1102.  
  1103.     // éoénélîNé≡ü|éPÅCÉ│é╡é─ò\Ī
  1104.     sprintf(str,"STAGE %2.2d : POM KUN %2.2d",stage_no,pom_max + 1);
  1105.     TextOut(DC,232,7,str,strlen(str));
  1106. }
  1107.  
  1108. // âXâeü[âWâ}âbâvé╠ɺì∞
  1109. // 0 Ok
  1110. // 1 Game All Clear
  1111. // 2 Error
  1112.  
  1113. int TGameWindow::StageMapMake(void )
  1114. {
  1115.     static unsigned char stack_data[STAGEMAP_SIZEX][STAGEMAP_SIZEY];
  1116.     static int stack_x,stack_y;
  1117.     static int stage_stack = 0;
  1118.     static int stack_pom;
  1119.     int block_x,block_y;
  1120.     int stage_tab;
  1121.     int cou1,cou2;
  1122.     char buf[80];
  1123.     FILE *fp;
  1124.  
  1125.     // Åëè·
  1126.     cor_turn = 4;
  1127.     cor_anm = 0;
  1128.     corkun_move_sw = 0;
  1129.  
  1130.     if (stage_mode == MAKEMAP_INIT)
  1131.         { // âXâ^âbâNâ}âbâvÅëè·ë╗
  1132.         stage_stack = 0;
  1133.         return(0);
  1134.         }
  1135.  
  1136. #if 1
  1137.     if (stage_stack == stage_no && stage_mode == MAKEMAP_RANDOM)
  1138.         { // âXâeü[âWâfü[â^é¬âXâ^âbâNé╔éáéΘé╞é½é═üAâXâ^âbâNé⌐éτâRâsü[
  1139.         for(cou1 = 0;cou1 <= STAGEMAP_SIZEX;cou1++)
  1140.             for(cou2 = 0;cou2 <= STAGEMAP_SIZEY;cou2++)
  1141.                 stagemap[cou1][cou2] = stack_data[cou1][cou2];
  1142.  
  1143.         corkun_x = stack_x;
  1144.         corkun_y = stack_y;
  1145.         pom_max = stack_pom;
  1146.  
  1147.         for(cou1 = 0;cou1 <= pom_max;cou1 ++)
  1148.             {
  1149.             pom_x[cou1] = corkun_x;
  1150.             pom_y[cou1] = corkun_y;
  1151.             }
  1152.         return(0);
  1153.         }
  1154. #endif
  1155.  
  1156.     stage_stack = stage_no;
  1157.  
  1158.     switch(stage_mode)
  1159.         {
  1160.         case MAKEMAP_FILELOAD : /* âtâ@âCâïô╟é▌ì₧é▌ */
  1161.             fp = fopen(stage_file,"rt");
  1162.             if (fp == NULL)
  1163.                  {
  1164.                  fclose(fp);
  1165.                  return(2);
  1166.                  }
  1167.             do
  1168.                 {
  1169.                 while (fgets(buf,80,fp) != NULL && buf[0] != '.');
  1170.                 if (strncmp(buf,".data",5) == 0)
  1171.                     {
  1172.                     sscanf(&buf[5],"%d",&stage_tab);
  1173.                     }
  1174.                 else
  1175.                     {
  1176.                     fclose(fp);
  1177.                     return(1);
  1178.                     }
  1179.                 }
  1180.             while (stage_no != stage_tab);
  1181.  
  1182.             fgets(buf,80,fp); sscanf(&buf[4],"%d",&pom_max);
  1183.             pom_max --;
  1184.  
  1185.             for (cou1 = 0;cou1 < STAGEMAP_SIZEY;cou1++)
  1186.                 {
  1187.                 if (fgets(buf,80,fp) == NULL)
  1188.                     {
  1189.                     stage_no = -1;
  1190.                     fclose(fp);
  1191.                     return(2);
  1192.                     }
  1193.                 for (cou2 = 0;cou2 < STAGEMAP_SIZEX;cou2++)
  1194.                     {
  1195.                     stagemap[cou2][cou1] = buf[cou2] - '0';
  1196.                     if (stagemap[cou2][cou1] == MAP_CORKUN)
  1197.                         {
  1198.                         corkun_x = cou2;
  1199.                         corkun_y = cou1;
  1200.                         }
  1201.                     }
  1202.                 }
  1203.             fclose(fp);
  1204.             break;
  1205.  
  1206.         case MAKEMAP_RANDOM : // âëâôâ_âÇâXâeü[âW
  1207.             if (stage_no > 30)
  1208.                 {
  1209.                 stage_no = -1;
  1210.                 return(2); // æOâXâeü[âWâNâèâA
  1211.                 }
  1212.  
  1213.             randomize();
  1214.             DefaultStageMake();
  1215.  
  1216.             for(cou1 = 1;cou1 <= stage_no + 5;cou1++)
  1217.                 {
  1218.                 block_x = random(16) + 2;
  1219.                 block_y = random(7)  + 2;
  1220.                 if (stagemap[block_x][block_y] != 0) cou1--;
  1221.                     else stagemap[block_x][block_y] = random(41) + 4;
  1222.                 }
  1223.  
  1224.             for(cou1 = 1;cou1 <= stage_no / 2;cou1++)
  1225.                 {
  1226.                 block_x = random(STAGEMAP_SIZEX - 4) + 2;
  1227.                 block_y = random(STAGEMAP_SIZEY - 4) + 2;
  1228.  
  1229.                 if (stagemap[block_x][block_y] != 0) cou1--;
  1230.                     else stagemap[block_x][block_y] = 24;
  1231.                 }
  1232.  
  1233.             // âJâëü[îNé╠ê╩ÆuâZâbâg
  1234.             do
  1235.                 {
  1236.                 corkun_x = random(STAGEMAP_SIZEX - 3) + 1;
  1237.                 corkun_y = random(STAGEMAP_SIZEY - 3) + 1;
  1238.                 }
  1239.             while(stagemap[corkun_x][corkun_y] != 0);
  1240.  
  1241.             // éoénélîNé╠âZâbâg
  1242.             pom_max = random(POMKUN_MAX - 8) + 8;
  1243.             break;
  1244.         }
  1245.  
  1246.     for(cou1 = 0;cou1 <= STAGEMAP_SIZEX;cou1++)
  1247.         for(cou2 = 0;cou2 <= STAGEMAP_SIZEY;cou2++)
  1248.             stack_data[cou1][cou2] = stagemap[cou1][cou2];
  1249.  
  1250.     stack_x = corkun_x;
  1251.     stack_y = corkun_y;
  1252.     stack_pom = pom_max;
  1253.  
  1254.     for(cou1 = 0;cou1 <= pom_max;cou1 ++)
  1255.         {
  1256.         pom_x[cou1] = corkun_x;
  1257.         pom_y[cou1] = corkun_y;
  1258.         }
  1259.  
  1260.     return(0);
  1261. }
  1262.  
  1263. // âXâeü[âWèεû{É▌îvüiâXâeü[âWâtâ@âCâïé¬î⌐é┬é⌐éτé╚é⌐é┴é╜ÅΩìçé╚é╟é╔Ägùpüj
  1264. void TGameWindow::DefaultStageMake(void )
  1265. {
  1266.     int cou1,cou2;
  1267.  
  1268.     // Å░
  1269.     for(cou1 = 0;cou1 < STAGEMAP_SIZEX;cou1 ++)
  1270.         for(cou2 = 0;cou2 < STAGEMAP_SIZEY;cou2 ++)
  1271.             stagemap[cou1][cou2] = MAP_YUKA;
  1272.  
  1273.     // ò╟
  1274.     for(cou1 = 0;cou1 < STAGEMAP_SIZEX;cou1 ++)
  1275.         {
  1276.         stagemap[cou1][0] = MAP_KABE;
  1277.         stagemap[cou1][STAGEMAP_SIZEY - 1] = MAP_KABE;
  1278.         }
  1279.     for(cou1 = 0;cou1 < STAGEMAP_SIZEY;cou1 ++)
  1280.         {
  1281.         stagemap[0][cou1] = MAP_KABE;
  1282.         stagemap[STAGEMAP_SIZEX - 1][cou1] = MAP_KABE;
  1283.         }
  1284.  
  1285.     // éoénélîNé╠Åëè·ë╗
  1286.     for(cou1 = 0;cou1 < POMKUN_MAX;cou1 ++)
  1287.         {
  1288.         pom_x[cou1] = corkun_x;
  1289.         pom_y[cou1] = corkun_y;
  1290.         }
  1291.  
  1292.     // Init Status
  1293.     pom_cou = 0;
  1294.     pom_max = 25;
  1295. }
  1296.  
  1297.  
  1298.